package cn.italkcloud.cph.service;

import cn.italkcloud.cph.constants.ReportTimeRangeEnum;
import cn.italkcloud.cph.entity.ReportVosCdr;
import cn.italkcloud.cph.entity.dto.vos.CdrDTO;
import cn.italkcloud.cph.entity.req.GetReportVosCdrReq;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * VOS通话数据报表-自定时间范围内的数据 服务类
 * </p>
 *
 * @author dominate
 * @since 2025-04-30
 */
public interface IReportVosCdrService extends IService<ReportVosCdr> {

    /**
     * 分析通话数据为报表
     *
     * @param reportTimeRange 报表时间段
     * @param cdrList         通话数据
     * @return 报表数据
     */
    Map<String, List<ReportVosCdr>> analysis(ReportTimeRangeEnum reportTimeRange, List<CdrDTO> cdrList);

    /**
     * 分析通话数据为报表后保存
     *
     * @param serverId        VOS服务器ID
     * @param reportTimeRange 报表时间段
     * @param cdrList         通话数据
     */
    List<ReportVosCdr> analysisAfterSave(int serverId, ReportTimeRangeEnum reportTimeRange, List<CdrDTO> cdrList);

    /**
     * 合并报表数据
     * 如果报表时间间隔短、请求计算间过短有较大可能出现同一时间间隔有多条数据
     *
     * @param serverId  VOS服务器ID
     * @param startDate 开始时间
     * @param endDate   结束时间
     */
    void mergeReport(int serverId, Date startDate, Date endDate);

    /**
     * 获取最新一条VOS通话数据ID
     *
     * @param serverId VOS服务器ID
     * @param day      日期
     * @return VOS通话数据ID
     */
    int getLatestVosCdrId(int serverId, Date day);

    List<ReportVosCdr> getReport(GetReportVosCdrReq req);

}
